package com.bailian.common.utils;

import org.apache.commons.lang3.StringUtils;
import java.util.regex.Pattern;

/**
 * HTML内容处理工具类
 * 
 * @author bailian
 * @date 2025-08-22
 */
public class HtmlContentUtils {
    
    /**
     * 清理HTML内容，避免JSON解析错误
     * 
     * @param content HTML内容
     * @return 清理后的内容
     */
    public static String cleanHtmlContent(String content) {
        if (StringUtils.isBlank(content)) {
            return content;
        }
        
        // 先清理基本字符
        content = cleanTextContent(content);
        
        // 处理可能的注释字符
        content = content.replace("//", "\\/\\/")
                        .replace("/*", "\\/\\*")
                        .replace("*/", "\\*\\/");
        
        return content;
    }
    
    /**
     * 清理普通文本内容
     * 
     * @param text 文本内容
     * @return 清理后的内容
     */
    public static String cleanTextContent(String text) {
        if (StringUtils.isBlank(text)) {
            return text;
        }
        
        // 转义可能导致JSON解析错误的字符
        // 使用StringBuilder来避免replace顺序问题
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            switch (c) {
                case '\\':
                    result.append("\\\\");
                    break;
                case '"':
                    result.append("\\\"");
                    break;
                case '\n':
                    result.append("\\n");
                    break;
                case '\r':
                    result.append("\\r");
                    break;
                case '\t':
                    result.append("\\t");
                    break;
                default:
                    result.append(c);
                    break;
            }
        }
        
        return result.toString();
    }
    
    /**
     * 验证HTML内容是否包含可能导致JSON解析错误的字符
     * 
     * @param content HTML内容
     * @return 是否安全
     */
    public static boolean isHtmlContentSafe(String content) {
        if (StringUtils.isBlank(content)) {
            return true;
        }
        
        // 检查是否包含未转义的特殊字符
        Pattern unsafePattern = Pattern.compile("[\\\\\"\n\r\t]");
        return !unsafePattern.matcher(content).find();
    }
    
    /**
     * 获取HTML内容的预览（去除HTML标签）
     * 
     * @param htmlContent HTML内容
     * @param maxLength 最大长度
     * @return 预览文本
     */
    public static String getHtmlPreview(String htmlContent, int maxLength) {
        if (StringUtils.isBlank(htmlContent)) {
            return "";
        }
        
        // 去除HTML标签
        String text = htmlContent.replaceAll("<[^>]*>", "");
        
        // 去除多余空格
        text = text.replaceAll("\\s+", " ").trim();
        
        // 截取指定长度
        if (text.length() > maxLength) {
            text = text.substring(0, maxLength) + "...";
        }
        
        return text;
    }
    
    /**
     * 获取HTML内容的预览（默认100字符）
     * 
     * @param htmlContent HTML内容
     * @return 预览文本
     */
    public static String getHtmlPreview(String htmlContent) {
        return getHtmlPreview(htmlContent, 100);
    }
} 